<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 引入vue -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>

</head>

<body>
    <!-- 
        Vue中可以使用v-for指令，来基于一个数组或者对象数据渲染一个列表。v-for指令需要使用 item in items形式的特殊语法，items是目标数据，item是遍历后的数据。

     -->
    <div id="app">

        <!-- 只遍历出一个item，单参数demo遍历数组: -->
        <ul>
            <li v-for="item in items">
                姓名:{{item.name}}<br>
                年龄:{{item.age}}<br>
            </li>
        </ul><br>

        <!-- v-for除了item还支持第二个参数：当前的索引！ -->
        <!-- 额外不常用：可以替换in为of！在数组层面，他们遍历出来后是一样的。 -->
        <ul>
            <li v-for="(item,index) in items">
                索引:{{index}}<br>
                姓名:{{item.name}}<br>
                年龄:{{item.age}}<br>
            </li>
        </ul>
        <br>


        <ul>
            <!-- key是维护状态
                当 Vue正在更新使用v-for渲染的元素列表时，它默认使用就地更新的策略。如果数据项的顺序被改变，Vue将不会移动DOM元素来匹配数据项的顺序，而是就地更新每个元素，并且确保它们在每个索引位置正确渲染。
                为了给 *Vue* 一个提示，以便它能跟踪每个节点的身份，从而重用和重新排序现有元素，我们需要为每项提供一个唯一 `key` 属性。
                建议就是使用v-for的是时候提供key属性，来给每个节点加一个唯一的标记。
            -->
            <li v-for="(item,key,index) in user" :key="index">
                {{index}}----{{key}}---{{item}}
            </li>
        </ul>
        <br>



        <!-- Vue中提供的v-on核心，是用来绑定dom事件，并在运行的时候，执行一些js代s码。
            点击事件，使用频率也很高，排第三，所以也有一个缩写：@符号
            如果事件定义的时候，没有传参@click="methodAdd"，默认会传递一个事件对应的参数$event。
        -->
        <input type="button" value="-1" @click="reduce(count, $event)">
        {{count}}
        <input type="button" value="+1" @click="add(count, $event)">
        <br>

        姓名:{{name}}
        <br>
        <input type="text" name="ss" @input="updateValue(name, $event)">
    </div>

    <script>
        new Vue({
            el: '#app',
            data() {
                return {
                    items: [
                        { name: "张三", age: "18" },
                        { name: "王五", age: "20" },
                        { name: "李四", age: "22" }
                    ],
                    user: {
                        name: "zhangsan",
                        age: "18",
                        phone: 13548011612
                    },
                    count: 0,
                    name: ""
                }
            },
            methods: {
                reduce(count, event) {
                    if (count > 0) {
                        this.count--;
                    }
                },
                add(count, event) {
                    this.count++;
                },
                updateValue(name, event) {
                    this.name = event.target.value;
                }
            },
        })
    </script>

</body>

</html>